package com.yc.cloud.common.utils;

import cn.hutool.core.util.ObjectUtil;
import cn.hutool.extra.ftp.Ftp;

import java.io.File;


/**
 * @author 杨智杰
 * @since 2021/12/1 14:55
 */
public class FtpUtil {

    /**
     * 从FTP下载的文件存放的位置
     */
    private static final String DOWNLOAD_FTP_FILE_PATH = "./ftp_file";

    /**
     * 创建ftp链接失败时的错误提示
     */
    private static final String LINK_ERROR = "链接FTP服务器失败!";

    /**
     * 从ftp服务器下载文件
     *
     * @param host ftp服务器host
     * @param path 文件路径
     */
    public static void download(String host, String path) {
        Ftp ftp = new Ftp(host);
        if (ObjectUtil.isNotNull(ftp)) {
            download(ftp, path);
        } else {
            try {
                throw new Exception(LINK_ERROR);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 从ftp服务器下载文件
     *
     * @param host     ftp服务器host
     * @param username 用户名
     * @param password 密码
     * @param path     文件路径
     */
    public static void download(String host, String username, String password, String path) {
        Ftp ftp = new Ftp(host, Ftp.DEFAULT_PORT, username, password);
        if (ObjectUtil.isNotNull(ftp)) {
            download(ftp, path);
        } else {
            try {
                throw new Exception(LINK_ERROR);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * 从ftp服务器下载文件
     *
     * @param ftp  ftp链接
     * @param path 文件路径
     */
    public static void download(Ftp ftp, String path) {
        File file = new File(DOWNLOAD_FTP_FILE_PATH);
        if (ftp.existFile(path)) {
            ftp.download(path, file);
        } else {
            try {
                throw new Exception("文件不存在!");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public static void upload(Ftp ftp, File file) {
        if (file.isDirectory()) {
            try {
                throw new Exception("请提供具体文件!");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        ftp.upload("", file);
    }
}
